package com.atXiao.food.template;

/**
 * 饮料模板
 *
 * @author: lixiaoxiao
 * @date: 2024/1/10 11:12
 * @version: 1.0
 * @desc:
 */
abstract class BeverageTemplate {


    /**
     * 定义模板方法
     */
    final void makeBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantCondiments()) {
            addCondiments();
        }
    }


    /**
     * 步骤一：烧水
     */
    private void boilWater() {
        System.out.println("烧水-------------");
    }


    /**
     * 步骤二：冲泡
     */
    protected abstract void brew();


    /**
     * 步骤三：倒入杯中
     */
    private void pourInCup() {
        System.out.println("倒水-------------");
    }


    /**
     * 钩子方法，子类选择性覆盖
     *
     * @return
     */
    protected boolean customerWantCondiments() {
        return true;
    }

    /**
     * 步骤四：添加调料
     */
    protected abstract void addCondiments();

}


